perm filename FNCDM.F4[1,LCS]2 blob sn#308314 filedate 1977-10-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	C***** FNCDM ***** LOAD WITH RDFNC, LOOK, AND NODM **************
C00025 ENDMK
C⊗;
C***** FNCDM ***** LOAD WITH RDFNC, LOOK, AND NODM **************
C  LOAD WITH -- RDFNC,NODM.MAC,LOOK.FAI 
C  THIS PROGRAM(FNCDM.F4) CREATES FUNCTIONS FOR THE MUSIC PROGRAM
C  USING 'SEG' OR 'SYNTH'.  UP TO 10 FUNCTIONS CAN BE STORED IN A
C  SINGLE FILE.  ONCE CREATED, THE FUNCTIONS MAY BE CHANGED
C  AND PUT BACK IN THE SAME FILE OR INTO A NEW ONE.
C  NO MORE THAN 50 INPUTS FOR ONE FUNCTION!

C TYPE 'C'(= CRUNCH)  FOR SPECIAL FEATURE SUBR TO COMBINE FUNCS 
C ALREADY MADE.      [MULT, ADD, RETRO, INVRT, ADD CONSTANT ]

C  SEG FUNCS MAY BE 'SMOOTHED' BUT THIS FEATURE AND 'CRUNCH' SHOULD 
C  BE USED SPARINGLY AS ALL 512 WDS OF THE ARRAY MUST BE SAVED.  THIS
C  CLUTTERS UP THE DSK.

C  'C' FOR "ALTER OR FINISH?" WILL JUMP DIRECTLY TO "CRUNCH" MODE.
C    BUT ONCE CHANGED BY 'CRUNCH' THIS UNSTORED ORIG. IS LOST.
C'SP'(FOR "SEE")PLOTS ONE FUNC. (SA=PLOT ALL); 'SL' PUTS IT OUT ON
C  THE LPT.

C FOR EXPONENTIALS GET INTO 'SEG'.  TYPE 'X', DECAY FAC, N.  IF 
C  N IS NON-ZERO THE FUNCTION WILL NOT! NORMALIZE (IE. NOT GO TO 0).
C  AFTER A FILE HAS BEEN READ IN,
C  THE DECAY FAC. IS THE NUM ALONGTHE SCALE(1-100) WHERE THE CURVE
C  SEEMS TO TOUCH ZERO. (WILL ALWAYS HIT 0 AT END UNLESS N.NE.0.)

C  <CR> FOR 'TYPE FILE' WILL HOLD ON TO IT.
	COMMON/S/H,AMP,CON,PH
	COMMON/RD/ A(50,4),B(2,10),FN(10),XA(10),AA(4,178,10)
	1,LX,JX,JT,IDEL,FNUM,FNUM1,Z,FLNM,FLNM1,KT
	COMMON FUNC(512),F2(512),K,I
	COMMON/LT/LPTY,JSEE
	DIMENSION RF(4)
21	FORMAT(' A=ALTER, F=FINISH '$)
22	FORMAT(' NEW FUNC, EDIT, CRUNCH, DELETE, RENAME, SEE?   '$)
23	FORMAT(' SEG OR SYNTH?   '$)
25	FORMAT(' TYPE FILE NAME   '$)
26	FORMAT(I3,') TYPE AMPL, STEP#  '$)
C  'X' HERE WILL MAKE EXPON. FUNC.
28	FORMAT(' 0=NORM,OR H,A,P,K   '$)
280	FORMAT(
	1' UP TO 10 FUNCTIONS MAY BE STORED IN EACH FILE'/
	1' TYPE "B" TO BACKUP AT ANY TIME'//)
30	FORMAT(8F)
31	FORMAT(1XA5,A1,5A5/)
35	FORMAT(1XA5,'IN FILE "',A5,'.FUN"'/)
37	FORMAT(8F9.3)
371	FORMAT(I3,') ',4F8.2)
372	FORMAT(A1,21F)
38	FORMAT(2(A5,A1),23A2)
40	FORMAT(11(A1,A3))
41	FORMAT(' ADD TO AN EXISTING FILE?   '$)
42	FORMAT(' WHICH FUNC?   '$)
47	FORMAT(
	1' <CR>=EXIT,   C=CHNG (LN#, CHNGS),'/' I=INSRT, (AMP, STP) 
	1D=DEL (LN#) '$)
48	FORMAT(' X  N (=DECAY FAC.) FOR XPONTLS')
	CALL ILL  
C!***** STOPS ILLEGAL CHAR. LOSSAGE
2281	TYPE 280
281	KZ=0
	JSEE=0
	LPTY=5
C   USED IN RELATIVE VECTOR ROUTINE
	Z=0
	EY=0
	ICUR=0
	XP=0
	KT=0
	FNUM=0
	OLD=0
	FNUM1=0
	TYPE 22
	ACCEPT 40,ON,P
	PLTALL=0
	IF(P.EQ.'A')GO TO 3280
	IF(P.NE.'X')GO TO 1281
3280	PLTALL=-1
1281	IPLOT=0
	XDPY=-1
	IF(ON.EQ.'N')GO TO 1000
	IF(ON.EQ.'E')GO TO 100
	IF(ON.EQ.'R')GO TO 100
	IF(ON.EQ.'D')GO TO 100
	IF(ON.EQ.'C')GO TO 100
	IF(ON.EQ.'S')GO TO 100
	IF(P.EQ.'A'.OR.P.EQ.'X')PLTALL=-1
CC 7/74 COLGATE	ON=ONX
C ---OUT 7/74---  RETURNS FOR MORE "SEE"
CC 7/74 COLGATE	GO TO 4281
	GO TO 281
C  WON'T GO ON IF BLANK
100	ONX=ON
	TYPE 25
	OLD=-1
	ACCEPT 38,FLNM1
	IF(FLNM1.EQ.' ')FLNM1=FLNM
	IF(FLNM1.EQ.0)GO TO 100
	IF(LOOKF(FLNM1).EQ.0)GO TO 100
	IF(FLNM.NE.FLNM1)GO TO 2151
	OLD=0
4281	TYPE 40,B
	IF(PLTALL)GO TO 5402
	GO TO 1402
2151	FLNM=FLNM1
	CALL READ1
3402	LX=0
	TYPE 40,B
	IF(PLTALL)GO TO 402
C  "SA" WILL PLOT ALL FUNCS IN FILE
	JX=-1
	IF(B(1,2).NE.' ')GO TO 1402
	FNUM1=B(2,1)
C  ONLY ONE FUNC IN FILE.
	GO TO 402
1402	TYPE 42
	ACCEPT 40,BU
	IF(BU.EQ.' ')GO TO 1402
	IF(BU.NE.'B')GO TO 380
	FLNM=0
	JX=0
	GO TO 281
380	REREAD 38,FNUM1
	IDEL=0
C  LX IS MAIN COUNTER
	IF(OLD)GO TO 402
	DO 1302 JX=1,10
1302	IF(FNUM1.EQ.FN(JX))GO TO 5402
CC 7/74 WHY WAS THIS HERE????	GO TO 3402
	GO TO 100
2202	CALL DPYF(-1,FUNC)
C  -1 SUPRESSES DISPLAY
	IF(P.EQ.'P'.OR.P.EQ.'A'.OR.P.EQ.0)GO TO 70
2203	LPTY=3
	JSEE=-1
	CALL DPY(FUNC,1)
	CALL RESET
	GO TO 2281
70	CALL PLOTIT(FUNC,XA(JX),P)
	IF(P.EQ.'P')GO TO 2281
	JX=JX+1
	IF(B(2,JX).NE.' '.AND.JX.LE.10)GO TO 2202
CC***	GO TO 2281
	CALL EXIT
402	CALL READER
	IF(JX)GO TO 100
C 6/74  GO BACK IF IT DIDN'T FIND THE FUNC NAME IN THIS FILE.
C  AT THIS POINT LX=TOTAL FUNCS+1
5402	IF(PLTALL)JX=1
1202	IF(ON.EQ.'C')GO TO 3202
	IF(ON.EQ.'S')GO TO 3202
	IF(ON.NE.'D')GO TO 3281
3202	CALL DPYF(JX,FUNC)
	IF(P.EQ.'L')GO TO 2203  
C!**** SL PLOTS ON LPT.
	IF(PLTALL)GO TO 2202
	IF(P.EQ.'P')GO TO 2202
	IF(P.EQ.0)GO TO 2202
	IF(ON.EQ.'S')GO TO 2281
	IF(ON.EQ.'C')GO TO 1201
1140	TYPE 1139
	ACCEPT 40,IDEL
	IF(IDEL.EQ.'N')GO TO 2281
	IF(IDEL.NE.'Y')GO TO 1140
	IDEL=JX
	LX=LX-1
C  NOW LX=TOTAL # OF FUNCS.
	CALL WRIFUN
1139	FORMAT(' DELETE IT? ',$)
CC2202	CALL PLOTIT(FUNC,XA(JX),P)
CC	IF(P.EQ.'P')GO TO 2281
CC	JX=JX+1
CC	IF(B(2,JX).NE.' '.AND.JX.LE.10)GO TO 1202
CCC  "SA" KEEPS PLOTTING UNTIL NO MORE ARE FOUND
CC	GO TO 2281
3281	X=' '
	TYPE 31,XA(JX),X,FN(JX)
	JT=4
	IF(XA(JX).EQ.'SEG')JT=2
	KZ=1
	DO 137	K=1,50
	KZ=KZ+1
	DO 138 L=1,JT
138	A(K,L)=AA(L,K,JX)
	IF(A(K,1).EQ.999)GO TO 4401
137	IF(A(K,2).GE.100)GO TO 4401

4401	Z=-1
	IF(A(K,2).LE.100)GO TO 4403
	IF(K.GT.1)GO TO 4404
	CALL DPYF(JX,FUNC)
	IF(ON.EQ.'R')GO TO 3032
	TYPE 4405
	A(1,2)=520
	GO TO 4201
4404	TYPE 4402
4403	IF(JT.EQ.2)EY='EG'
	GO TO 1032
4402	FORMAT('  IT WAS SMOOTHED.')
4405	FORMAT(' CANNOT EDIT CRUNCHED FUNCS.'/)
1000	TYPE 23
	ACCEPT 40,BU
	IF(BU.EQ.'B')GO TO 281
	REREAD 40,X,EY
1032	CALL ZERO(FUNC)
C  CLEARS THE FUNC.
	ISMOO=0
	IF(EY.EQ.'EG')GO TO 800
151	EY=0
	JT=4
C  FOR WRIFUN
15	KT=1
104	IF(Z.EQ.-1)GO TO 102
	IF(KT.LT.KZ)GO TO 102
	IF(Z.EQ.1)GO TO 2032
1041	KZ=0
	TYPE 28
	Z=0
	ACCEPT 40,BU
	IF(BU.EQ.'B')GO TO 509
	REREAD 30,(A(KT,K),K=1,4)
C ACCEPT HARM,AMPL,PHASE,KONSTANT(IF K>100, MULTIPLIES WAVE *(K-100))
102	H=A(KT,1)
	IF(H.EQ.0)GO TO 2200
	IF(H.EQ.999.)GO TO 2200
C   999 ENDS 'READIN' SYNTHS
	IF(Z.GT.0)TYPE 371,KT,(A(KT,K),K=1,4)
	AMP=A(KT,2)
	PH=A(KT,3)
	CON=A(KT,4)
	CALL SYN(FUNC)
	KT=KT+1
	IF(KZ.LE.KT)CALL DPY(FUNC,1)
	GO TO 104
2201	IF(JT.NE.2)GO TO 1201
	IF(A(KT-1,2).GT.100)GO TO 1201
C  TO USE CURRENT FUNC IN CRUNCH
	IF(LX.GT.10)GO TO 204
	CALL STORE(10)
C  PUTS FROM A ARRAY TO AA ARRAY
C?????	XA(K)='SEG'
CC 6/74 COLGATE--SEE ALSO FUSUB 	CALL DPYF(K,FUNC)
	CALL DPYF(10,FUNC)
1201	CALL ZFUNC
C  THIS WILL BE FOR SPECIAL FEATURE PACKAGE
	IF(KT.EQ.512)GO TO 2281
C  FOR BACKUP
4201	EY='EG'
	KT=2
	GO TO 900
2200	IF(KT.LE.1)GO TO 509
C  7/74 COLGATE  BACKUP IF NO INPUT TO SYNTH
CC2200	CALL NORM(FUNC)
	CALL NORM(FUNC)
C   NORMALIZES THE FUNCTION
201	CALL DPY(FUNC,1)
	IF(BU.EQ.'A')GO TO 2032
	IF(ON.EQ.'R')GO TO 3032
204	TYPE 21
	IF(EY.EQ.'EG')TYPE 271
C   CHANGE IT?
	ACCEPT 40,BU
	IF(BU.EQ.'A')GO TO 210
	IF(BU.EQ.'F')GO TO 900
	IF(BU.EQ.'S')GO TO 7000
	IF(BU.EQ.'C')GO TO 2201
C  TO USE CURRENT FUNC IN CRUNCH
	IF(BU.NE.'B')GO TO 2032
	IF(EY.EQ.'EG')GO TO 509
	GO TO 5091
C   NEXT IS FOR ALTERS ('A' OR <CR>)
2032	TYPE 47
	ACCEPT 40,K
	REREAD 372,L,X,RF
	IF(X.NE.0)GO TO 211
	IF(RF(1).NE.0)GO TO 211
	IF(EY.EQ.'EG')GO TO 204
	BU=0
	GO TO 1041
211	L=X
	IF(K.EQ.'I')GO TO 212
	IF(K.NE.'D')GO TO 205
C   JUMP IF NO DELETE
	KT=KT-1
	DO 209 K=L,KT
	DO 209 J=1,4
209	A(K,J)=A(K+1,J)
	GO TO 210
205	X=RF(2)
	IF(EY.NE.'EG')GO TO 1207
	IF(X.NE.0)GO TO 1205
	X=A(L,2)
	RF(2)=X
C TYPE JUST AMPL. TO CHANGE IT ONLY. (STEP 0 =SAME STEP AS BEFORE.)
1205	IF(X.LT.A(L+1,2))GO TO 208
	IF(L.LT.KT-1)GO TO 2032
	GO TO 208
212	L=1
	H=X
	IF(EY.NE.'EG')GO TO 4212
	L=L+1
	H=RF(1)
4212	DO 1212 K=1,KT
1212	IF(H.GE.A(K,L))GO TO 2212
C NOW WE KNOW WHERE TO MAKE THE INSERT
CIRC2212	DO 3212 L=KT+1,2,-1
CIRC3212	RF(L)=RF(L-1)
CC212	IF(RF(2).NE.0)GO TO 213
2212	RF(2)=RF(1)
	RF(1)=X
	L=KT
213	IF(EY.NE.'EG')GO TO 214
	X=RF(2)
	DO 215 K=1,KT
	Y=A(K,2)
	IF(X.GT.Y)GO TO 215
C   JUMP IF NOT PAST STEP NUM.
	L=K
	IF(X.EQ.Y)GO TO 208
C   IF STEP=ANOTHER STEP, IT WORKS LIKE 'C'HANGE.
	GO TO 214
215	CONTINUE
214	KT=KT+1
	DO 206 K=KT,L,-1
	DO 206 J=1,4
206	A(K,J)=A(K-1,J)
	GO TO 207
C   TO TYPE OLD NUMBERS
208	IF(X.GT.A(L-1,2))GO TO 1207
	IF(L.GT.1)GO TO 2032
1207	TYPE 371,L,(A(L,K),K=1,4)
207	DO 202 K=1,4
202	A(L,K)=RF(K)
210	KZ=KT
	Z=1
	GO TO 1032
271	FORMAT('+S=SMOOTH  '$)
C  FOR RENAMES
3032	Z=-1
	GO TO 901
900	TYPE 41
C  ADD TO EXISTING FILE
	ISKP=0
	ACCEPT 40,Z
9000	IF(Z.EQ.'B')GO TO 204
	IF(Z.EQ.'Y')GO TO 9001
	IF(Z.NE.'N')GO TO 900
9001	TYPE 25
	ACCEPT 38,FLNM
	IF(FLNM.NE.' ')GO TO 9002
	IF(FLNM1.NE.' ')FLNM=FLNM1
9002	IF(FLNM.EQ.'B')GO TO 204
	IF(FLNM.EQ.' ')GO TO 204
CC	IF(LOOKF(FLNM).AND.Z.EQ.'N')GO TO 902
	IF(LOOKF(FLNM))GO TO 902
	IF(Z.NE.'N')GO TO 900
C  LOOKF CHECKS ON LOOK-UP  FOR NAME.FUN
901	JT=4
	IF(EY.EQ.'EG')JT=2
	IDEL=0
	CALL WRIFUN
	GO TO 900
C  COMES BACK IF NO ROOM IN FILE FOR NEW FUNC.

902	IF(Z.NE.'N')GO TO 901
	TYPE 381,FLNM
	ACCEPT 40,Z
	IF(Z.EQ.'Y')GO TO 903
	GO TO 9000
903	Z='N'
	GO TO 901
C  7/74 COLGATE  NOW WILL REALLY WRITE OVER A FILE!
381	FORMAT(/9X'WRITE OVER ',A5,'.FUN?  ',$)
161	DO 261 K=1,512
261	FUNC(K)=EXP((1-K)/STEP)
	KT=2
	XP=-1
	IF(H.NE.0)GO TO 7009
C  H}0 = NO NORMALIZATION OF XPONTL
	X=FUNC(512)
	DO 361 K=1,512
361	FUNC(K)=FUNC(K)-(K-1)/511.*X
	GO TO 7009
800	IF(XP)GO TO 510
	X=0
	IK=0
	JT=2
C  JT AND EY SEEM TO PERFORM THE SAME FUNCTIONS??
	Y=0
	KT=1
504	IF(KT.GE.KZ)GO TO 510
	AMP=A(KT,1)
5008	STEP=A(KT,2)
	IF(STEP.LE.A(KT-1,2).AND.KT.GT.1)GO TO 509
C   SO IT CAN'T GO BACKWARDS
	GO TO 5071
611	FORMAT(' NO MORE THAN 50 SEGS'/)
610	TYPE 611
509	KT=KT-1
5091	IF(KT.LT.1)GO TO 281
	GO TO 210
510	IF(KT.EQ.1)TYPE 48
	TYPE 26,KT
	KZ=0
CX	ACCEPT 40,BU
	ACCEPT 372,BU,STEP,H
	IF(BU.EQ.'B')GO TO 509
61	REREAD 30,AMP,STEP,H
	IF(STEP.LT.1)STEP=1
	IF(BU.EQ.'X')GO TO 161
C  TYPE 'X' FOR EXPON. FUNC. + DECAY FACTOR, +1 = NO NORM.
C  WE START WITH STEP 1 (NOT 0)
5071	IF(KT.GT.50)GO TO 610
C   TOO MANY SEGS
	IF(Z.GT.0)TYPE 371,KT,AMP,STEP
	IF(STEP.GT.100)STEP=100
CX	STPS=STEP-X
CX	IF(STPS.LE.0.AND.KT.NE.1)GO TO 504
C   SO IT CAN'T BACKUP HERE
CX	IS=STPS
CX	IF(STEP.LE.1.)Y=AMP
CC COLGATE 6/74	DIF=(AMP-Y)/STPS
CX	IF(IS.NE.0)DIF=(AMP-Y)/STPS
CX	IJ=STPS*5.12
CX203	DO 2031 K=1,IJ
CX2031	FUNC(K+IK)=Y+DIF*K/5.12
C   100 STEPS ARE CONVERTED HERE TO 512
CX	IK=IK+IJ
CX12	Y=AMP
CX	X=STEP
CX	A(KT,1)=Y
CX	A(KT,2)=X
	DIF=AMP-Y
	IF(STEP-X.GT.0)GO TO 9003
	IF(KT.NE.1)GO TO 504
C   SO IT CAN'T BACKUP HERE
9003	IF(STEP.LE.1.)Y=AMP
	STPS=STEP-X
	IS=STPS
	IF(STEP.LE.1.)Y=AMP
CC COLGATE 6/74	DIF=(AMP-Y)/STPS
	IF(IS.NE.0)DIF=(AMP-Y)/STPS
	IJ=STPS*5.12
	DO 2031 K=1,IJ
2031	FUNC(K+IK)=Y+DIF*K/5.12
C   100 STEPS ARE CONVERTED HERE TO 512
	IK=IK+IJ
203	YSTP=STEP
	IF(YSTP.GT.1)GO TO 12
	YSTP=0
12	Y=AMP
	X=YSTP
	IF(KT.GT.1)GO TO 404
	IF(STEP.LE.1)GO TO 404
C  PUTS 0,0 IN IF 1ST STEP IS NOT 1 OR 0
	A(1,1)=0
	A(1,2)=0
	KT=2
404	A(KT,1)=Y
CC	A(KT,2)=X
	A(KT,2)=STEP
7001	KT=KT+1
C   KT COUNTS SEGMENTS
	IF(STEP.LT.100)GO TO 504
	GO TO 201


7000	IF(ISMOO)GO TO 201
	IF(KT.LE.20)GO TO 7007
	TYPE 7008
	GO TO 509
7008	FORMAT(' NO MORE THAN 20 SEGS IN CURVES'/)
7007	CALL SSS(A,KT-1,FUNC)
C   DRAWS GRID 2
7009	A(KT-1,2)=520
	ISMOO=-1
C  SO YOU CAN'T COME BACK 2 TIMES
	GO TO 201
	END

	SUBROUTINE WRIFUN
	COMMON/RD/ A(50,4),B(2,10),FN(10),XA(10),AA(4,178,10)
	1,LX,JX,J,IDEL,FNUM,FNUM1,Z,FLNM,FLNM1,KT
	COMMON FUNC(512),F2(512),K,I
 	DATA ARY/'ARRAY'/,R999/999.0/,MX/' '/
24	FORMAT(' TYPE FUNCTION NAME   '$)
34	FORMAT(A5,'(',A5,');',A5)
35	FORMAT(1XA5,'IN FILE "',A5,'.FUN"'/)
37	FORMAT(8F10.4)
39	FORMAT(A5,10(A1,A3))
391	FORMAT(A3)
390	FORMAT(A1)
43	FORMAT(' NO ROOM IN FILE  "',A5,'.FUN"')
44	FORMAT(' FUNCTIONS ALREADY IN FILE - ',A5)
45	FORMAT('(512);')

CX	MX=0
	IF(IDEL.NE.0)GO TO 292
C  FOR DELETIONS
	IF(Z.EQ.'N')GO TO 912
	IF(FLNM.EQ.FLNM1)GO TO 1922
C  JUMP IF THAT FILE IS NOW IN CORE
	FLNM1=0
C  ↑↑↑↑↑↑ TO GUARD AGAINST CONFUSION IN BACKUPS.
	CALL READ1
1922	IF(Z.EQ.'N')GO TO 912
CC COLGATE 7/741922	TYPE 44,FLNM
	TYPE 44,FLNM
C  FUNCS. IN FILE
	TYPE 39,MX,B
912	TYPE 24
	ACCEPT 390,FNUM
	IF(FNUM.EQ.'B')RETURN
C  FOR BACKUP
	IF(FNUM.EQ.' ')GO TO 1922
	REREAD 391,FNUM
	IF(Z.EQ.'N')GO TO 911
	IF(Z.NE.-1)GO TO 90
C JUMP IF .NE. 'RENAME'
C 7/74 COLGATE
	DO 30 K=1,LX-1
	IF(K.EQ.JX.OR.FN(K).NE.FNUM)GO TO 30
	TYPE 31
	CALL EXIT
31	FORMAT(/' FUNC NAME IN USE!')
30	CONTINUE
	B(2,JX)=FNUM
	FN(JX)=FNUM
	LX=LX-1
	GO TO 1906
90	IF(FLNM.EQ.FLNM1)GO TO 1090
	FNUM1=0
	LX=0
C  TO PUT NEW FUNC IN OLD FILE
	CALL READER
1090	JX=0
	DO 20 K=1,LX-1
	IF(FNUM.NE.FN(K))GO TO 20
	JX=K
	LX=LX-1
	GO TO 21
20	CONTINUE
210	JX=LX
C  JX=LX IF FNUM WAS NOT FOUND
	IF(JX.GT.10)GO TO 193
21	FN(JX)=FNUM
	X='SEG'
	IF(J.EQ.4)X='SYNTH'
	XA(JX)=X
	CALL STORE(JX)
	IF(J.EQ.2)GO TO 1192
	AA(1,KT,JX)=999
	GO TO 192
1192	IF(A(KT-1,2).EQ.100)GO TO 192
C  JUMP IF NO SMOOTHING
	DO 2192 K=1,512
2192	AA(K,KT,JX)=FUNC(K)

192	IF(JX.NE.1)B(1,JX)=','
	B(2,JX)=FNUM
	GO TO 1906
193	TYPE 43,FLNM
C  NO ROOM IN FILE.
	RETURN
C  NEW FILE
911	LX=1
	DO 94 K=1,20
94	B(K,1)=' '
	GO TO 210
C  CLEARS B FOR NEW, SINGLE ITEM.
292	IF(IDEL.EQ.10)GO TO 932
	DO 931 K=IDEL,LX-1
931	B(2,K)=B(2,K+1)
932	B(1,LX)=' '
	B(2,LX)=' '
1906	REWIND 1
	IF(Z.EQ.'N'.OR.IDEL.GT.0)GO TO 22
	DO 25 K=1,LX
	IF(K.GT.1.AND.B(1,K).NE.',')GO TO 26
	X=B(2,K)
	IF(X.NE.' '.AND.X.EQ.FN(K))GO TO 25
26	TYPE 23
	RETURN
23	FORMAT(/' CONFUSION IN THIS FILE. TRY ANOTHER! '/)
25	CONTINUE
CX22	CALL FORNAM(FLNM,'FUN')
C  WRITES FILE WITH EXTENSION .FUN
22	REWIND 1
	CALL OFILE(1,FLNM,'.FUN')
CX  USES MY OFILE ROUTINE !!!!!
CC  NOT YET! 22	CALL OFLE(1,FLNM,'.FUN')
C  COLGATE OFILE REPLACEMENT.  ALL FUNC FILES WILL BE '.FUN'.
	WRITE(1,39),ARY,B
	WRITE(1,45)
69	NX=0
1905	IF(NX.EQ.LX)GO TO 904
C  LX=TOTAL # OF FUNCS
	NX=NX+1
	IF(IDEL.EQ.NX)GO TO 1905
C  SO THAT DATA MUST ALWAYS BE READ FROM DSK AFTER A DEL.
1	J=4
	X='   99'
	IF(XA(NX).NE.'SEG')GO TO 68
	J=2
	X=' '
68	WRITE(1,34),XA(NX),FN(NX),X
	JX=0
2905	JX=JX+1
	IF(J.EQ.2)GO TO 3905
	IF(AA(1,JX,NX).EQ.999)GO TO 5905
C  FOUND END OF A SYNTH
	WRITE(1,37),(AA(K,JX,NX),K=1,4)
	GO TO 2905
5905	WRITE(1,37)R999
	GO TO 1905
3905	X=AA(2,JX,NX)
	WRITE(1,37),AA(1,JX,NX),X
	IF(X.EQ.100)GO TO 1905
C  FOUND END OF A SEG
	IF(X.LT.100)GO TO 2905
	WRITE(1,37)(AA(K,JX+1,NX),K=1,512)
	GO TO 1905
904	TYPE 39,MX,B
	IF(IDEL.EQ.0)TYPE 35,FNUM,FLNM
	IF(IDEL.NE.0)FLNM=0
	LX=LX+1
C  FOR RESTARTS
	CALL EXIT
	END